package fr.afcepf.atod21.data;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.List;

import javax.sql.DataSource;

import fr.afcepf.atod21.entity.Stagiaire;
import fr.afcepf.atod21.exception.Atod21Exception;
/**
 * @see IDaoStagiaire
 * @author Stagiaire
 */
public class DaoStagiaireImpl implements IDaoStagiaire {
    /**
     * DataSource pour l'acces a la BDD
     * 'oragnisme_formation'.
     */
    private DataSource ds = new Atod21DataSource();
    /**
     * requete pour ajouter dans la BDD.
     */
    private final String reqAjout =
        "INSERT INTO stagiaire "
      + "(nom,prenom,adresse,date_naissance,id_organisme)"
      + "values (?,?,?,?,?)";
    /**
     * Indice du parametre pour le nom du
     * {@link Stagiaire} dans la requete
     * {@link DaoStagiaireImpl#reqAjout}.
     */
    private final int indiceNomReqAjout = 1;
    /**
     * Indice du parametre pour le prenom du
     * {@link Stagiaire} dans la requete
     * {@link DaoStagiaireImpl#reqAjout}.
     */
    private final int indicePrenomReqAjout = 2;
    /**
     * Indice du parametre pour l'adresse du
     * {@link Stagiaire} dans la requete
     * {@link DaoStagiaireImpl#reqAjout}.
     */
    private final int indiceAdresseReqAjout = 3;
    /**
     * Indice du parametre pour la dateNaissance du
     * {@link Stagiaire} dans la requete
     * {@link DaoStagiaireImpl#reqAjout}.
     */
    private final int indiceNaissanceReqAjout = 4;
    /**
     * Indice du parametre pour l'organisme du
     * {@link Stagiaire} dans la requete
     * {@link DaoStagiaireImpl#reqAjout}.
     */
    private final int indiceOrganismeReqAjout = 5;
    @Override
    public Stagiaire ajouter(Stagiaire paramStagiaire) throws Atod21Exception {
        try {
            Connection cnx = ds.getConnection();
            PreparedStatement pstmt =
                    cnx.prepareStatement(reqAjout,
                            Statement.RETURN_GENERATED_KEYS);
            pstmt.setString(indiceNomReqAjout,
                            paramStagiaire.getNom());
            pstmt.setString(indicePrenomReqAjout,
                            paramStagiaire.getPrenom());
            pstmt.setString(indiceAdresseReqAjout,
                            paramStagiaire.getAdresse());
            pstmt.setDate(indiceNaissanceReqAjout,
                    new java.sql.Date(
                            paramStagiaire.getDateNaissance()
                            .getTime()));
            if (paramStagiaire.getOrganisme() != null
             && paramStagiaire.getOrganisme().getId() != 0) {
                pstmt.setInt(indiceOrganismeReqAjout,
                                paramStagiaire.getOrganisme()
                                .getId());
            } else {
                pstmt.setNull(indiceOrganismeReqAjout,
                        Types.INTEGER);
            }
            int resultSql = pstmt.executeUpdate();
            if (resultSql == 1) {
                ResultSet rs = pstmt.getGeneratedKeys();
                if (rs.next()) {
                    paramStagiaire.setId(rs.getInt(1));
                }
            }
        } catch (SQLException e) {
            throw new Atod21Exception(
                    "Erreur 10001 - DaoStagiaire->ajouter " + e.getMessage());
        }
        return paramStagiaire;
    }
    @Override
    public List<Stagiaire> rechercher(String paramNom) {
        // TODO Auto-generated method stub
        return null;
    }
   

    @Override
    public List<Stagiaire> rechercher(int paramIdOrganisme) {
        // TODO Auto-generated method stub
        return null;
    }
private final String reqRenvoi="UPDATE stagiaire set id_organisme = null "
					+"where idstagiaire = ? and id_organisme=?";
    
private final int indiceIdStaRenvoi = 1;
private final int indiceIdOrganismeRenvoi = 2;
    @Override
    public Stagiaire renvoi(Stagiaire paramStagiaire) throws Atod21Exception {
    	try{
       Connection cnx = ds.getConnection();
       PreparedStatement pstmt = cnx.prepareStatement(reqRenvoi);
       pstmt.setInt(indiceIdStaRenvoi, paramStagiaire.getId());
       pstmt.setInt(indiceIdOrganismeRenvoi, paramStagiaire.getOrganisme().getId());
       if (pstmt.executeUpdate()==1){
    	   paramStagiaire.setOrganisme(null);
       } else {
    	   throw new Atod21Exception("Erreur 10002 - DaoStagiaire->renvoi"
    			   + "Le stagiaire n'est pas dans cet organisme");
       }
       
    	} catch (SQLException e) {
    		throw new Atod21Exception("Erreur 100002 - DaoStagiare->renvoi" +e.getMessage());
    	}
       
        return paramStagiaire;
    }

}
